/*
 * ImagenesDAO.java
 *
 * Created on 26 de septiembre de 2006, 17:13
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.mensajesalertas.alertas.dao;
import com.src.computec.mensajesalertas.alertas.dto.AlertaDto;
import com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales;
import static com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales.SCHEMA;
import static com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales.CODIGO_ES_ARCHIVO;
import static com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales.CODIGO_ACTIVO;
import static com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales.CODIGO_INACTIVO;
import static com.src.computec.mensajesalertas.base.constantes.ConstantesGenerales.PATH_ARCHIVOS_ALERTAS;
import com.src.computec.radar.base.dao.GenericDAO;
import com.src.computec.radar.base.dao.exception.DAOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/**
 *
 * @author Jose Luis Perea Alvarez
 */
public class AlertasDAO extends GenericDAO implements BaseAlertasDAO
{    
    ConstantesGenerales constantesGenerales = ConstantesGenerales.getInstance();
    
    /** Creates a new instance of CargueDAO */
    public AlertasDAO() {
    }
    
    public List getAlertasActivas(AlertaDto dto) throws DAOException 
    {
        Connection con = null;
        PreparedStatement statement = null;
        List retornoLst = new ArrayList();        
        ResultSet rs = null;
        
        try 
        {
            con = getConnectionDB2();
            statement = con.prepareStatement("SELECT CODIGO_MENSAJE_ALERTA, CODIGO_TIPO_ARCHIVO, CODIGO_RESPONSABLE, DESCRIPCION_MENSAJE_ALERTA, " +
                                                    "ORIGEN_MENSAJE_ALERTA, FECHA_REGISTRO, ESTADO, PATH_MENSAJE_ALERTA " +
                                             "FROM "+ SCHEMA +".MENSAJE_ALERTA " +
                                             "WHERE CODIGO_RESPONSABLE = ? AND ESTADO = ? AND " +
                                                    "(DESCRIPCION_MENSAJE_ALERTA LIKE '%" + dto.getDescripcion() + "%' OR ORIGEN_MENSAJE_ALERTA LIKE '%" + dto.getOrigen() + "%') " +
                                             "ORDER BY FECHA_REGISTRO DESC");
                        
            int indice=0;
            
            statement.setObject(++indice, dto.getCodigoResponsable());
            statement.setObject(++indice, CODIGO_ACTIVO);
            rs = statement.executeQuery();
            
            while(rs.next())
            {
                int indice1=0;
                
                AlertaDto alertaDto = new AlertaDto(); 
                
                alertaDto.setCodigo(rs.getString(++indice1));
                alertaDto.setArchivo(rs.getString(++indice1).equals(CODIGO_ES_ARCHIVO));
                alertaDto.setCodigoResponsable(rs.getString(++indice1));
                alertaDto.setDescripcion(rs.getString(++indice1));   
                alertaDto.setOrigen(rs.getString(++indice1));                
                alertaDto.setFechaRegistro(rs.getDate(++indice1));   
                alertaDto.setEstado(rs.getString(++indice1));
                String pathIngresado = rs.getString(++indice1);
                
                if( pathIngresado != null && !pathIngresado.equals("") )
                {
                    alertaDto.setTienePath(true);
                    alertaDto.setPathArchivo(alertaDto.isArchivo()? PATH_ARCHIVOS_ALERTAS + pathIngresado: pathIngresado);
                }                    
                
                retornoLst.add(alertaDto);
            }
        }
        catch (SQLException e) 
        {
            throw new DAOException("AlertasDAO:getAlertasActivas: " +e.toString(), e);
        } 
        finally 
        {
            closeConnection(con, statement,rs);
        }
        return retornoLst;
    }
    
    public void eliminarAlertas(List alertasEliminadas) throws DAOException
    {
        Connection con = null;
        PreparedStatement statement = null;
        
        try 
        {
            con = getConnectionDB2();
            statement = con.prepareStatement("UPDATE "+ SCHEMA +".MENSAJE_ALERTA SET ESTADO = ? WHERE CODIGO_MENSAJE_ALERTA = ? ");
                  
            Iterator iter = alertasEliminadas.iterator();
            
            while(iter.hasNext())
            {
                String codigoAlerta = (String)iter.next(); 
                //String codigoAlerta = ((AlertaDto)iter.next()).getCodigo();
                
                int indice1=0;            
                statement.setString(++indice1, CODIGO_INACTIVO);
                statement.setString(++indice1, codigoAlerta);
                statement.executeUpdate();
            }
        }
        catch (SQLException e) 
        {
            throw new DAOException("AlertasDAO:eliminarAlertas: " +e.toString(), e);
        } 
        finally 
        {
            closeConnection(con, statement);
        }
    }
}
